#include "JZCoMutex.h"
#include "JZCo.h"

//JZCoMutex
JZCoMutex::JZCoMutex()
{
}

JZCoMutex::~JZCoMutex()
{
}

bool JZCoMutex::tryLock() 
{
    return !m_locked.exchange(true);
}

void JZCoMutex::lock()
{
    while(true)
    {
        if(tryLock())
            return;

        jzco_sleep(10);
    }
}

void JZCoMutex::unlock()
{
    m_locked = false;
}

//JZCoMutexLocker
JZCoMutexLocker::JZCoMutexLocker(JZCoMutex *mutex)
{
    m_mutex = mutex;
    m_mutex->lock();
}

JZCoMutexLocker::~JZCoMutexLocker()
{
    m_mutex->unlock();
}